package com.knife.interfaces.extension.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.Map;

/**
 * @author tianhao.luo@hand-china.com
 * @version 1.0
 * @date 2022年03月09日 星期三 8:33 下午
 * @description
 * @since 1.0
 */
@ConfigurationProperties(prefix = "knife.interface.amap")
public class AmapKeyProperties {
    /**
     * 使用的版本,值为当前配置的属性名
     * @date 2022/3/9 8:37 下午
     */
    private String active="v2";

    /**
     * 是否启用IP转化
     */
    private Boolean enableFlag=false;

    /**
     * 高德配置v1，对应1.0版本
     * @description
     * @since 1.0
     * @version 1.0
     * @author tianhao.luo@hand-china.com
     * @date 2022/3/10 1:02 下午
     */
    private V1 v1;

    /**
     * 高德配置v2，对应2.0版本
     * @description
     * @since 1.0
     * @version 1.0
     * @author tianhao.luo@hand-china.com
     * @date 2022/3/10 1:02 下午
     */
    private V2 v2;

    public Boolean getEnableFlag() {
        return enableFlag;
    }

    public void setEnableFlag(Boolean enableFlag) {
        this.enableFlag = enableFlag;
    }

    public V1 getV1() {
        return v1;
    }

    public void setV1(V1 v1) {
        this.v1 = v1;
    }

    public V2 getV2() {
        return v2;
    }

    public void setV2(V2 v2) {
        this.v2 = v2;
    }

    public static class V1{
        /**
         * 获取IP对应详情的高德URL,注意其中 ip 参数最后手动拼接
         * @description
         * @since 1.0
         * @version 1.0
         * @author tianhao.luo@hand-china.com
         * @date 2022/3/10 1:00 下午
         */
        private String url = "https://restapi.amap.com/v3/ip?key=${key}&ip=";

        /**
         * 高德获取 ip 详情的 url 参数名;配合 url 进行解析;和上面url 进行对应,ip 不需要关注
         *
         * @description
         * @since 1.0
         * @version 1.0
         * @author tianhao.luo@hand-china.com
         * @date 2022/3/10 1:00 下午
         */
        private Map<String,String> args;

        /**
         * 高德详情转化为记录在日志中的消息内容，支出以${}进行解析内容
         * 例如：${city}-${district} 可以解析为 重庆市-渝北区
         * @description
         * @since 1.0
         * @version 1.0
         * @author tianhao.luo@hand-china.com
         * @date 2022/3/10 1:00 下午
         */
        private String template="${province}-${city}";


        public Map<String, String> getArgs() {
            return args;
        }

        public void setArgs(Map<String, String> args) {
            this.args = args;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public String getTemplate() {
            return template;
        }

        public void setTemplate(String template) {
            this.template = template;
        }
    }


    public static class V2{
        /**
         * 获取IP对应详情的高德2.0 URL,注意其中 ip 参数最后手动拼接
         * @description
         * @since 1.0
         * @version 1.0
         * @author tianhao.luo@hand-china.com
         * @date 2022/3/10 1:00 下午
         */
        private String url="https://restapi.amap.com/v5/ip?key=${key}&type=4&ip=";

        /**
         * 高德获取 ip 详情的 url 参数名;配合 url 进行解析;和上面url 进行对应,ip 不需要关注
         *
         * @description
         * @since 1.0
         * @version 1.0
         * @author tianhao.luo@hand-china.com
         * @date 2022/3/10 1:00 下午
         */
        private Map<String,String> args;

        /**
         * 高德详情转化为记录在日志中的消息内容，支出以${}进行解析内容
         * 例如：${city}-${district} 可以解析为 重庆市-渝北区
         * @description
         * @since 1.0
         * @version 1.0
         * @author tianhao.luo@hand-china.com
         * @date 2022/3/10 1:00 下午
         */
        private String template="${country}-${province}-${city}-${district}";

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public String getTemplate() {
            return template;
        }

        public void setTemplate(String template) {
            this.template = template;
        }

        public Map<String, String> getArgs() {
            return args;
        }

        public void setArgs(Map<String, String> args) {
            this.args = args;
        }
    }

    public String getActive() {
        return active;
    }

    public void setActive(String active) {
        this.active = active;
    }
}
